Flutter 中文文档:Packages 的开发和提交
1. Package 介绍
通过使用 packages (的模式)可以创建易于共享的模块化代码。一个最基本的 package 由以下内容构成:
pubspec.yaml
文件:用于定义 package 名称、版本号、作者等其他信息的元数据文件。包含共享代码的
lib
目录,其中至少包含一个<package-name>.dart
文件。
1.1 Package 类别
Package 包含以下两种类别:
纯 Dart 库:用 Dart 编写的传统 package,比如
path
。其中一些可能包含 Flutter 的特定功能,因此依赖于 Flutter 框架,其使用范围仅限于 Flutter,比如fluro
。原生插件:使用 Dart 编写的,按需使用 Java 或 Kotlin、ObjC 或 Swift 分别在 Android 和/或 iOS 平台实现的 package。一个具体的例子是
battery
。
步骤1:创建 package
想要创建纯 Dart 库的 package,请使用带有 --template=package
标志的 flutter create
命令:
这将在 hello/
目录下创建一个 package 项目,其中包含以下内容:
lib/hello.dart
package 的 Dart 实现代码。
test/hello_test.dart
Package 的 单元测试。
lib/<package name>.dart
文件中添加功能实现,或在 lib
目录中的多个文件中添加功能实现。test
目录下添加 单元测试。--template=plugin
标志的 flutter create
命令。--org
选项,以反向域名表示法来指定你的组织。该值用于生成的 Android 及 iOS。hello/
目录下创建一个插件项目,其中包含以下内容:lib/hello.dart
:android/src/main/java/com/example/hello/HelloPlugin.kt
:ios/Classes/HelloPlugin.m
:example/
:
-i
指定 iOS 所使用的语言和/或使用-a
指定 Android 所使用的语言。比如:步骤 2a:定义 package API(.dart)
hello/
主目录,并找到 lib/hello.dart
文件。步骤 2b:添加 Android 平台代码(.java/.kt)
cd hello/example; flutter build apk
)。hello/example/android/build.gradle
文件;hello/java/com.example.hello/HelloPlugin
。步骤 2c:添加 iOS 平台代码(.h+.m/.swift)
cd hello/example; flutter build ios --no-codesign
)。hello/example/ios/Runner.xcworkspace
文件。Pods/Development Pods/hello/Classes/
。步骤 2d:关联 API 和平台代码
README.md
文件用来对 package 进行介绍CHANGELOG.md
文件用来记录每个版本的更改LICENSE
文件用来阐述 package 的许可条款device_info docs
cd ~/dev/mypackage
export FLUTTER_ROOT=~/dev/flutter
(适用于 macOS 或 Linux 操作系统)
set FLUTTER_ROOT=~/dev/flutter
(适用于 Windows 操作系统)
dartdoc
工具(作为 Flutter SDK 的一部分):$FLUTTER_ROOT/bin/cache/dart-sdk/bin/dartdoc
(适用于 macOS 或 Linux 操作系统)
%FLUTTER_ROOT%\bin\cache\dart-sdk\bin\dartdoc
(适用于 Windows 操作系统)
package_1
<some license text>
--------------------------------------------------------------------------------
package_2
<some license text>
package_1
<some license text>
--------------------------------------------------------------------------------
package_1
package_2
<some license text>
<some license text>
--------------------------------------------------------------------------------
<some license text>
package_1
<some license text>
--------------------------------------------------------------------------------
<some license text>
pub.dev
上,以便其他开发者可以轻松地使用它。pubspec.yaml
、README.md
以及 CHANGELOG.md
文件已被审查,以保证其内容的完整性和正确性。hello
依赖于另外一个 package 所公开的 Dart API,你需要将该 package 添加到文件 pubspec.yaml
的 dependencies
段中。以下代码使得插件 url_launcher
的 Dart API 在 hello
中可用:hello/pubspec.yaml
文件中:dependencies:
url_launcher: ^0.4.2
hello
的 Dart 代码中使用 import 'package:url_launcher/url_launcher.dart'
和 launch(someUrl)
。hello
是一个 原生插件 package,其特定的平台代码如果需要访问 url_launcher
所公开的平台特定 API,那么还需要为特定平台的构建文件添加适当的依赖说明,如下所示:hello/android/build.gradle
文件中:android {
// lines skipped
dependencies {
provided rootProject.findProject(":url_launcher")
}
}
hello/android/src
目录下的源代码文件中使用 import io.flutter.plugins.urllauncher.UrlLauncherPlugin
并访问类 UrlLauncherPlugin
。hello/ios/hello.podspec
文件中:Pod::Spec.new do |s|
# lines skipped
s.dependency 'url_launcher'
hello/ios/Classes
目录下的源代码文件中使用 #import "UrlLauncherPlugin.h"
并访问 UrlLauncherPlugin
这个类了。